#ifndef __Bone_hpp__
#define __Bone_hpp__

#include "Pointer.hpp"
#include "Matrix4.hpp"
#include "Array.hpp"
#include "CollisionShape.hpp"

namespace ge {

GE_DECLARE_CLASS( Bone );

//----------------------------------------------------------------------------//
// Bone
//----------------------------------------------------------------------------//

class Bone : public virtual ReferenceCounted
{
 public:

     enum ShapeType
     {
          ShapeType_None,
          ShapeType_Box = CollisionShape::Type_Box,
          ShapeType_Sphere = CollisionShape::Type_Sphere,
          ShapeType_Cylinder = CollisionShape::Type_Cylider,
          ShapeType_Capsule = CollisionShape::Type_Capsule,
          ShapeType_Cone = CollisionShape::Type_Cone,
          //ShapeType_Mesh = CollisionShape::Type_Mesh,
     };

     class ShapeDesc : public virtual ReferenceCounted
     {
      public:

          ShapeType m_type;
          //String m_mesh_name;
          Quaternion m_orientation;
          Vector3 m_position;
     };


     // Description
     class Desc : public virtual ReferenceCounted
     {
      public:

      protected:
     };
     GE_DECLARE_PTR( Desc );

     // State
     class State : public virtual ReferenceCounted
     {
      public:

      protected:
     };
     GE_DECLARE_PTR( Desc );

 protected:

     BoneWeakPtr m_parent;
     Array< BonePtr > m_children;
     CollisionShapePtr m_shape;
     uint m_id;
     String m_name;
};

} // namespace ge

#endif//__Bone_hpp__
